﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using NovaSystem.ComponentesNegocio;
using System.Data;
using NovaSystem.EntidadesNegocio;
using System.Globalization;

namespace NovaSystem.InterfazUsuarioWeb
{
    public partial class wfCompras : System.Web.UI.Page
    {
        private const string CONCEPTO_CENTROCOSTO = "CENTRO COSTO";
        private const string CONCEPTO_SHIPPER = "SHIPPER";
        private const string CONCEPTO_UNIDAD = "UNIDAD";
        private const string CONCEPTO_FORMAPAGO = "FORMA PAGO";
        private const string CONCEPTO_ESTADO_SOLICITUD = "ESTADO SOLICITUD";
        private const string CONCEPTO_METODO_DESPACHO = "METODO DESPACHO";
        CultureInfo culturaMoneda = new CultureInfo(configuracion.Instancia.CulturaMoneda);
        NumberFormatInfo nfi = new NumberFormatInfo();
        private const int COL_IDPRODUCTO = 1;

        protected void Page_Load(object sender, EventArgs e)
        {
            
            if (!Page.IsPostBack)
            {
                txtFechaSolicitud.Text = DateTime.Now.ToShortDateString();
                LlenarCombos();
                InicializarPagina();
            }
        }
        private void CrearTablaTemporalDetalle()
        {
            DataTable tblDetalle = new DataTable();
            DataColumn colIdProducto = new DataColumn("idProducto", typeof(int));
            DataColumn colCodProducto = new DataColumn("codigo", typeof(string));
            DataColumn colDesProducto = new DataColumn("descripcion", typeof(string));
            DataColumn colCantidad = new DataColumn("cantidad", typeof(int));
            DataColumn colPrecio = new DataColumn("precio", typeof(decimal));
            DataColumn colTotal = new DataColumn("total", typeof(decimal));
            tblDetalle.Columns.Add(colIdProducto);
            tblDetalle.Columns.Add(colCodProducto);
            tblDetalle.Columns.Add(colDesProducto);
            tblDetalle.Columns.Add(colCantidad);
            tblDetalle.Columns.Add(colPrecio);
            tblDetalle.Columns.Add(colTotal);
            Session["tblDetalle"] = tblDetalle;
        }
        private void InicializarPagina()
        {
            btnBuscarProveedor.Attributes.Add("onclick", "ModalPopup3('wfBProveedor.aspx','dialogHeight:400px;dialogWidth:790px;edge:sunken;status:no;unadorned:yes','" + txtRutProveedor.ClientID + "','" + txtNombreProveedor.ClientID + "','" + hfIdProveedor.ClientID + "');return false;");
            btnBuscarProducto.Attributes.Add("onclick", "ModalPopup3('" + Page.ResolveUrl("~") + "Logistica/wfBProducto.aspx','dialogHeight:400px;dialogWidth:790px;edge:sunken;status:no;unadorned:yes','" + txtProducto.ClientID + "','" + txtDescripcion.ClientID + "','" + hfIdProducto.ClientID + "');return false;");
            txtCantidad.Attributes.Add("onblur", "var cantidad = " + txtCantidad.ClientID + ".value; var precio = " + txtPrecio.ClientID + ".value;total = parseFloat(cantidad) * parseFloat(precio);" + txtTotal.ClientID + ".value = total;");
            txtPrecio.Attributes.Add("onblur", "var cantidad = " + txtCantidad.ClientID + ".value; var precio = " + txtPrecio.ClientID + ".value;total = parseFloat(cantidad) * parseFloat(precio);" + txtTotal.ClientID + ".value = total;");
            CrearTablaTemporalDetalle();
        }

        private void LlenarCombos()
        {
            ddlCentroCosto.DataSource = Negociomantenedor.Instancia.Listar(CONCEPTO_CENTROCOSTO);
            ddlCentroCosto.DataBind();

            ddlShipper.DataSource = Negociomantenedor.Instancia.Listar(CONCEPTO_SHIPPER);
            ddlShipper.DataBind();


            ddlFormaPago.DataSource = Negociomantenedor.Instancia.Listar(CONCEPTO_FORMAPAGO);
            ddlFormaPago.DataBind();

            ddlEstadoSolicitud.DataSource = Negociomantenedor.Instancia.Listar(CONCEPTO_ESTADO_SOLICITUD);
            ddlEstadoSolicitud.DataBind();

            ddlMetodoDespacho.DataSource = Negociomantenedor.Instancia.Listar(CONCEPTO_METODO_DESPACHO);
            ddlMetodoDespacho.DataBind();
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            decimal precio = 0;
            decimal cantidad = 0;
            decimal.TryParse(txtPrecio.Text, out precio);
            decimal.TryParse(txtCantidad.Text, out cantidad);


            DataTable tblDetalle = (DataTable)Session["tblDetalle"];
            DataRow nuevaFila = tblDetalle.NewRow();
            nuevaFila["idProducto"] = hfIdProducto.Value;
            nuevaFila["codigo"] = txtProducto.Text;
            nuevaFila["descripcion"] = txtDescripcion.Text;
            nuevaFila["cantidad"] = txtCantidad.Text;
            nuevaFila["precio"] = txtPrecio.Text;
            nuevaFila["total"] = (precio * cantidad).ToString();
            tblDetalle.Rows.Add(nuevaFila);
            Session["tblDetalle"] = tblDetalle;
            gvDetalle.DataSource = tblDetalle;
            gvDetalle.DataBind();

            txtCantidad.Text = "";
            txtPrecio.Text = "";
            txtDescripcion.Text = "";
            txtProducto.Text = "";
            hfIdProducto.Value = "";
            txtTotal.Text = "";

            ObtenerTotales();
        }

        protected void OnDelete(object sender, CommandEventArgs e)
        {
            DataTable tblDetalle = (DataTable)Session["tblDetalle"];
            int index = int.Parse(e.CommandArgument.ToString());
            tblDetalle.Rows.RemoveAt(index);
            Session["tblDetalle"] = tblDetalle;
            gvDetalle.DataSource = tblDetalle;
            gvDetalle.DataBind();
            ObtenerTotales();
        }

        private void ObtenerTotales()
        {
            try
            {

                parametros param = Negocioparametros.Instancia.Listar()[0];
                DataTable tblDetalle = (DataTable)Session["tblDetalle"];
                if (tblDetalle.Rows.Count == 0)
                {
                    txtSubtotal.Text = "0";
                    txtImpuesto.Text = param.impuesto.ToString();
                    txtTotalGral.Text = "0";
                    txtDescuento.Text = "0";

                }
                else
                {
                    culturaMoneda.NumberFormat.CurrencyDecimalDigits = 0;
                    decimal subtotal = (decimal)tblDetalle.Compute("Sum(total)", "");
                    decimal total = 0;
                    decimal descuento = 0;
                    decimal.TryParse(txtDescuento.Text, out descuento);
                    decimal impuesto = (subtotal * param.impuesto / 100) ;

                    txtSubtotal.Text = subtotal.ToString("c",culturaMoneda);
                    txtImpuesto.Text = impuesto.ToString("c",culturaMoneda);
                    total = (subtotal + impuesto);
                    txtTotalGral.Text = total.ToString("c",culturaMoneda);
                    if (descuento == 0)
                        txtDescuento.Text = "0";
                }


            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        protected void gvDetalle_RowCreated(object sender, GridViewRowEventArgs e)
        {
            e.Row.Cells[COL_IDPRODUCTO].Visible = false;
        }

       
    }
}
